package chapter03;

public class Test07_polymorphic {
    public static void main(String[] args) {
        Cat c = new Cat();
        Dog4 d = new Dog4();
        c.shout();
        d.shout();
        //子类对象转换成父类对象 自动完成的
        Animal3 a3 = c;
        Animal3 a4 = d;
        //父类转换成子类 需要强制转型
        Dog4 d1 = (Dog4) d;
        Cat c1 = (Cat) c;
        //不能出现 原来类型不匹配强制转换
        //(Dog4)c; 将猫类型强制转换成狗类型报错 即使父类一致
        //多态 父类对象指向子类类型 由父类方法寻找到子类的方法
        Animal3 a1 = new Cat();
        Animal3 a2 = new Dog4();
        a1.shout();
        a2.shout();
        Animal3[] b = {a1,a2};
        for(int i=0;i<b.length;i++){
            b[i].shout();
        }
        //调用静态方法 父类做参数类型 传入子类 形成多态
        info(a1);
        info(a2);

    }
    static void info(Animal3 a){
        a.shout();
    }
}
interface Animal3{
    void shout();
}
class Cat implements Animal3{
    public void shout(){
        System.out.println("喵喵");
    }
}
class Dog4 implements Animal3{
    public void shout(){
        System.out.println("汪汪");
    }
}
//定义一个Person的类 有一个introduce方法
//定义一个教师类Teacher 重写introduce方法 介绍教师本身
//定义一个Student类 重写introduce方法 介绍学生本身
//定义10个学生 5个教师对象 进行自我介绍
